/* 
 * Cashbox is the legal property of its developers, whose names are listed in the copyright file included
 * with this source distribution.
 * 
 * This program is free software; you can redistribute it and/or modify it under the terms of the GNU
 * General Public License as published by the Free Software Foundation; either version 2 of the License,
 * or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
 * Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along with this program; if not,
 * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */

#import "CBModelExtensionPlugin.h"
#import <Cashbox/CBDataControllerProtocol.h>

@implementation CBModelExtensionPlugin

- (NSManagedObjectModel *)model {
	if (!model) {
		model = [NSManagedObjectModel mergedModelFromBundles:
				 [NSArray arrayWithObject:[NSBundle bundleForClass:[self class]]]];
	}
	return model;
}

- (void)model:(Class)pluginModel extends:(Class)builtinModel {
	NSEntityDescription *subEntity = [[[self model] entitiesByName] objectForKey:[pluginModel description]];
	NSEntityDescription *entity = [[[[cashbox dataController] builtInManagedObjectModel] entitiesByName]
								   objectForKey:[builtinModel description]];
	[entity setSubentities:[[entity subentities] arrayByAddingObject:subEntity]];	
}

- (void)model:(Class)pluginModel hasOne:(Class)builtinModel throughAttribute:(NSString *)attribute {
	
	NSEntityDescription *pluginEntity = [[[self model] entitiesByName] objectForKey:[pluginModel description]];
	NSEntityDescription *builtinEntity = [[[[cashbox dataController] builtInManagedObjectModel] entitiesByName]
										  objectForKey:[builtinModel description]];	
	NSMutableDictionary *pluginEntityProperties = [[pluginEntity propertiesByName] mutableCopy];
	NSPropertyDescription *currentProperty = [pluginEntityProperties objectForKey:attribute];
	
	NSRelationshipDescription *relationship = [[NSRelationshipDescription alloc] init];
	[relationship setDestinationEntity:builtinEntity];
	[relationship setOptional:[currentProperty isOptional]];
	[relationship setName:attribute];
	[relationship setMinCount:1];
	[relationship setMaxCount:1];
	[relationship setDeleteRule:NSNullifyDeleteRule];
	
	[pluginEntityProperties setObject:relationship forKey:attribute];
	[pluginEntity setProperties:[pluginEntityProperties allValues]];
}

@end
